#pragma once 

#include <iostream>
#include <string>
#include <ctime>

#define NORMAL   1
#define WARNING  2
#define DEBUG    3
#define FATAL    4

//宏定义中的#符号表示将参数转换为字符串
//__FILE__和__LINE__是预处理器的内置宏，分别表示当前代码所在的文件名和行号。
//该宏接受四个参数：LEVEL、MESSAGE和__FILE__、__LINE__
//其中LEVEL表示日志级别，MESSAGE表示日志消息
//在使用该宏时，LEVEL和MESSAGE参数会被替换为实际的日志级别和消息
//__FILE__和__LINE__参数会被替换为当前代码所在的文件名和行号
#define LOG(LEVEL, MESSAGE) log(#LEVEL, MESSAGE, __FILE__, __LINE__)


void log(std::string level, std::string message, std::string file, int line)
{
    // 基于当前系统的当前日期/时间
   time_t now = time(0);
   
   // 把 now 转换为字符串形式
   char* dt = ctime(&now);

    std::string data(dt);
    //data.back() = ' ';
    data.erase(data.length() - 1);

    std::cout << "[本地日期和时间 : " << data << "]" << "[" << level << "]" <<  "[" << message << "]" << "[" << file << " : " << line << "]" << std::endl;
}
